var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);


server.listen(3000, () => {
    console.log('服务已成功启动，监听端口号3000');
});

app.use(require('express').static('public'));
app.get('/', function (req, res) {
    res.sendfile(__dirname + '/index.html');
});

let users = [];
io.on('connection', function (socket) {
    // 处理登录事件
    socket.on('login', (data) => {
        // 查找是否重复登录
        console.log(users);
        for (let i of users) {
            console.log(i);
            if(i===data.username){
                console.log('有元素相等');
                socket.emit('loginError', { message: '用户已登录！不能重复登录' })
                return;
            }
        }
        //为socket对象添加当前用户标识
        socket.username = data.username;
        socket.avatar = data.avatar;
        // 添加到总用户中
        users.push(data);
        console.log('add user to all_users'+users);
        // 个人事件
        socket.emit('loginSuccess', data);
        // 广播加入聊天事件
        io.emit('addUser', data);
        // 重新设置列表人数
        io.emit('updateList', users);

                // let res = users.find(item => item.username === data.username);//数组的find方法
                // //console.log('res是'+res);这样会把对象变成一个字符串进行字符串拼接，即res是[object Object]
                // console.log('数组里有元素和传入的用户名相等，是',res);
                // if (res) {  
                //     socket.emit('loginError', { message: '用户已登录！不能重复登录' })
                // } else {
                //     // 为socket对象添加当前用户标识
                //     socket.username = data.username;
                //     socket.avatar = data.avatar;
                //     // 添加到总用户中
                //     users.push(data);
                //     console.log('add user to all_users'+users);
                //     // 个人事件
                //     socket.emit('loginSuccess', data);
                //     // 广播加入聊天事件
                //     io.emit('addUser', data);
                //     // 重新设置列表人数
                //     io.emit('updateList', users);
                //}
    });

    // 监听退出连接事件
    socket.on('disconnect', () => {
        // 查找退出登录的用户索引
        const i = users.findIndex(item => item.username === socket.username);
        // 发送广播退出聊天事件
        io.emit('loginOut', users[i]);
        // 删除该用户
        //???????????????目前出现一个问题，就是刷新浏览器回触发这个事件
        users.splice(i,1);
        console.log('delete user to all_users'+users);
        // 重新设置列表人数
        io.emit('updateList', users);
    });

    // 设置发送信息聊天事件
    socket.on('trigger_send', (data) => {
        // 广播 触发 发送消息
        io.emit('send', data);
    });

});
